﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using DTO_MechSys;
using System.Data;

namespace DAL_MechSys
{
    public class DALOrdemPendente : DALBase
    {

        public void Excluir(int ordemPendenteID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirOrdemPendente";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@ordempendenteid", ordemPendenteID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Inserir(DTOOrdemPendente dtoOrdemPendente)
        {
            try
            {
                string storedProssidere = "sp_InserirOrdemPendente";
                int prioridade = 0;
                switch (dtoOrdemPendente.Prioridade)
                {
                    case "Baixa": prioridade = 1; break;
                    case "Média": prioridade = 2; break;
                    case "Alta": prioridade = 3; break;
                }
                SqlParameter[] parameters =
                
                { 
                   new SqlParameter("@veiculoid", dtoOrdemPendente.VeiculoID),
                   new SqlParameter("@dataentrada", dtoOrdemPendente.DataEntrada),
                   new SqlParameter("@previsaoentrega", dtoOrdemPendente.PrevisaoEntrega),
                   //new SqlParameter("@dataentrega", dtoOrdemPendente.DataEntrega),
                   new SqlParameter("@resumo", dtoOrdemPendente.Resumo),                       
                   new SqlParameter("@descricao", dtoOrdemPendente.Descricao),
                   
                   new SqlParameter("@prioridade", prioridade),
                   new SqlParameter("@status", dtoOrdemPendente.Status)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Atualizar(DTOOrdemPendente dtoOrdemPendente)
        {
            try
            {
                string storedProssidere = "sp_AtualizarOrdemPendente";
                DateTime Entrega;

                if (dtoOrdemPendente.DataEntrega < dtoOrdemPendente.DataEntrada)
                    Entrega = dtoOrdemPendente.DataEntrada.AddDays(-1);
                else
                    Entrega = dtoOrdemPendente.DataEntrega;
                int prioridade = 0;
                switch (dtoOrdemPendente.Prioridade)
                {
                    case "Baixa": prioridade = 1; break;
                    case "Média": prioridade = 2; break;
                    case "Alta": prioridade = 3; break;
                }

                SqlParameter[] parameters =

                {                  
                   new SqlParameter("@ordempendenteid", dtoOrdemPendente.OrdemPendenteID),
                   new SqlParameter("@veiculoid", dtoOrdemPendente.VeiculoID),
                   new SqlParameter("@dataentrada", dtoOrdemPendente.DataEntrada),
                   new SqlParameter("@previsaoentrega", dtoOrdemPendente.PrevisaoEntrega),
                   new SqlParameter("@dataentrega", Entrega),
                   new SqlParameter("@resumo", dtoOrdemPendente.Resumo),                       
                   new SqlParameter("@descricao", dtoOrdemPendente.Descricao),
                   new SqlParameter("@prioridade", prioridade),
                   new SqlParameter("@status", dtoOrdemPendente.Status)  
                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        //public DataTable BuscarOrdemPendente()
        //{
        //    DataTable dataTable = new DataTable();
        //    dataTable.Columns.Add("OrdemPendenteID", typeof(int));
        //    dataTable.Columns.Add("VeiculoID", typeof(int));
        //    dataTable.Columns.Add("DataEntrada", typeof(DateTime));
        //    dataTable.Columns.Add("PrevisaoEntrega", typeof(DateTime));
        //    dataTable.Columns.Add("DataEntrega", typeof(DateTime));
        //    dataTable.Columns.Add("Resumo", typeof(string));
        //    dataTable.Columns.Add("Descricao", typeof(string));
        //    dataTable.Columns.Add("Prioridade", typeof(string));
        //    dataTable.Columns.Add("Nome", typeof(string));
        //    dataTable.Columns.Add("Veiculo", typeof(string));

        //    DataRow dataRow;
        //    try
        //    {
        //        string storedProssidere = "sp_BuscarOrdemPendente";
        //        using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
        //        {
        //            while (sqlDataReader.Read())
        //            {
        //                dataRow = dataTable.NewRow();
        //                dataRow["OrdemPendenteID"] = (int)sqlDataReader["Descricao"];
        //                dataRow["VeiculoID"] = (int)sqlDataReader["Descricao"];
        //                dataRow["DataEntrada"] = DateTime.Parse((string)sqlDataReader["Descricao"]);
        //                dataRow["PrevisaoEntrega"] = DateTime.Parse((string)sqlDataReader["Descricao"]);
        //                dataRow["DataEntrega"] = DateTime.Parse((string)sqlDataReader["Descricao"]);
        //                dataRow["Resumo"] = (string)sqlDataReader["Descricao"];
        //                dataRow["Descricao"] = (string)sqlDataReader["Descricao"];
        //                switch ((int)sqlDataReader["Descricao"])
        //                {
        //                    case 1: dataRow["Prioridade"] = "Baixa"; break;
        //                    case 2: dataRow["Prioridade"] = "Média"; break;
        //                    case 3: dataRow["Prioridade"] = "Alta"; break;
        //                }
        //                dataRow["Nome"] = (string)sqlDataReader["Descricao"];
        //                dataRow["Veiculo"] = (string)sqlDataReader["Descricao"];


        //            }
        //        }
        //    }
        //    catch (SqlException)
        //    {
        //        throw;
        //    }
        //    return dataTable;
        //}

        public List<DTOOrdemPendente> BuscarOrdemPendentePendentes()
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendentePendentes";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOrdemPendente()
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendente";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOrdemPendentePesquisa(string texto)
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendentePesquisaCarro";
                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOrdemPendenteCarrosConcluidos()
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendenteConcluidas";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOrdemPendenteCarrosPendentes()
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendentePendentes";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOrdemPendenteConcluidas()
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendenteConcluidas";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        private DTOOrdemPendente CriarOrdemPendente(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOOrdemPendente dtoProduto = new DTOOrdemPendente();

                if (!string.IsNullOrEmpty(sqlDataReader["OrdemPendenteID"].ToString()))
                {
                    dtoProduto.OrdemPendenteID = (int)sqlDataReader["OrdemPendenteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoProduto.Descricao = (string)sqlDataReader["Descricao"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["VeiculoID"].ToString()))
                {
                    dtoProduto.VeiculoID = (int)sqlDataReader["VeiculoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataEntrada"].ToString()))
                {
                    dtoProduto.DataEntrada = DateTime.Parse(sqlDataReader["DataEntrada"].ToString());
                }
                if (!string.IsNullOrEmpty(sqlDataReader["DataEntrega"].ToString()))
                {
                    dtoProduto.DataEntrega = DateTime.Parse(sqlDataReader["DataEntrega"].ToString());
                }
                if (!string.IsNullOrEmpty(sqlDataReader["PrevisaoEntrega"].ToString()))
                {
                    dtoProduto.PrevisaoEntrega = DateTime.Parse(sqlDataReader["PrevisaoEntrega"].ToString());
                    if (dtoProduto.PrevisaoEntrega < dtoProduto.DataEntrada)
                        dtoProduto.PrevisaoEntrega = DateTime.Parse(null);
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Resumo"].ToString()))
                {
                    dtoProduto.Resumo = sqlDataReader["Resumo"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Veiculo"].ToString()))
                {
                    dtoProduto.Veiculo = sqlDataReader["Veiculo"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Placa"].ToString()))
                {
                    dtoProduto.Placa = sqlDataReader["Placa"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Nome"].ToString()))
                {
                    dtoProduto.Dono = sqlDataReader["Nome"].ToString();
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Prioridade"].ToString()))
                {
                    int prioridade = (int)(sqlDataReader["Prioridade"]);
                    switch (prioridade)
                    {
                        case 1: dtoProduto.Prioridade = "Baixa"; break;
                        case 2: dtoProduto.Prioridade = "Média"; break;
                        case 3: dtoProduto.Prioridade = "Alta"; break;
                        default: dtoProduto.Prioridade = "Baixa"; break;

                    }
                }


                if (!string.IsNullOrEmpty(sqlDataReader["Status"].ToString()))
                {
                    dtoProduto.Status = bool.Parse(sqlDataReader["Status"].ToString());
                }

                return dtoProduto;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public DTOOrdemPendente PesquisarOrdemPendente(int ordempendenteid)
        {
            DTOOrdemPendente dtoOrdemPendente = new DTOOrdemPendente();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendentePesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@ordempendenteid", ordempendenteid)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoOrdemPendente;
        }

        public List<DTOOrdemPendente> PesquisarOrdemPendentePendente(string descricao, int codigo)
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendentePendentes";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", descricao),
                   new SqlParameter("@int", codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }

        public List<DTOOrdemPendente> PesquisarOrdemPendenteConcluidas(string descricao, int codigo)
        {
            List<DTOOrdemPendente> lstOrdemPendente = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_BuscarOrdemPendenteConcluidas";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", descricao),
                   new SqlParameter("@int", codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOOrdemPendente dtoOrdemPendente = CriarOrdemPendente(sqlDataReader);

                        lstOrdemPendente.Add(dtoOrdemPendente);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdemPendente;
        }
    }
}
